//
//  OAuthViewController.swift
//  zyqWeibo
//
//  Created by 张亚琼 on 15/6/25.
//  Copyright © 2015年 张亚琼. All rights reserved.
//

import UIKit
import SVProgressHUD

class OAuthViewController: UIViewController,UIWebViewDelegate {
    
    // 定义常量
    private let WB_Client_ID    = "2765210936"
    private let WB_Redirect_URI = "http://www.baidu.com"
    private let WB_App_Secret   = "d87dfb497b900a00ee06491e2ed4ebe2"
    // 授权页面
    // 使用懒加载
    lazy var webView: UIWebView? = {
        let v = UIWebView()
        v.delegate = self
        return v
    }()
//    var webView: UIWebView?
    override func loadView() {
//         实例化
//        webView = UIWebView()
//        webView?.delegate = self
        // 设置为根视图
        view = webView
        
        // 设置导航栏的信息
        title = "新浪微博"
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target:self, action: "close")
        
    }
    func close() {
        dismissViewControllerAnimated(true, completion: nil)

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        loadAuthPage()
    }
    /// 加载授权页面
    func loadAuthPage() {
        //https://api.weibo.com/oauth2/authorize?client_id=2765210936&redirect_uri=http://www.baidu.com
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=\(WB_Client_ID)&redirect_uri=\(WB_Redirect_URI)"
        let url = NSURL(string: urlString)!
        webView?.loadRequest(NSURLRequest(URL: url))
    }
    
    /// 代理方法，每次加载新页面都会调用
    // 开始加载的时候调用
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
//        print("开始加载")
        /** 加载登录界面的时候，request.URL.absoluteString是：Optional(https://api.weibo.com/oauth2/authorize?client_id=2765210936&redirect_uri=http://www.baidu.com)
         登录之后加载授权页面：request.URL.absoluteString是：Optional(https://api.weibo.com/oauth2/authorize)
         点击授权按钮：request.URL.absoluteString是Optional("http://www.baidu.com/?code=6c67eeaad6e9e5906b04b45b560424d4")
        没有点击授权按钮，而是点击了取消按钮 request.URL.absoluteString是Optional("http://www.baidu.com/?error_uri=%2Foauth2%2Fauthorize&error=access_denied&error_description=user%20denied%20your%20request.&error_code=21330")
        */
//        print(request.URL?.absoluteString)
        
        let urlString = request.URL!.absoluteString
        // 判断是否以WB_Redirect_URI为前缀
        // 以WB_Redirect_URI为前缀的时候表示已经点击授权按钮开始授权啦
        if !urlString.hasPrefix(WB_Redirect_URI) {
//            print("继续加载")
            return true
        }
        // 如果是以WB_Redirect_URI为前缀，可能是点击了授权按钮，也可能点击了取消按钮
        print("需要判断")
        // 获取URL中的查询字符串，就是？号之后的那一部分
        let query = request.URL!.query!
        let codeStr = "code="
        // 判断是否包含code=，包含就表示点击了授权按钮
        if query.hasPrefix(codeStr) {
            let code = query.substringFromIndex(advance(codeStr.endIndex, 0))
            
            print("获取到授权码啦：\(code)")
            // 根据授权码获取令牌
            loadAccessToken(code)
            
        }else {
            print("取消授权")
        }
        
        return false
    }
    
    private func loadAccessToken(code: String) {
        // url
        let urlString = "oauth2/access_token"
        // 请求参数（五个）
        let params = ["client_id": WB_Client_ID,
            "client_secret": WB_App_Secret,
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": WB_Redirect_URI]
        


        // 发起请求
        NetworkTool.sharedNetworkTool().POST(urlString, parameters: params, success: { (_, JSON) -> Void in
            
            // 字典转模型
            let account = UserAccount(dict: JSON as! [String : AnyObject])
            // 把token信息保存起来。因为account中已经包含了用户信息，所以该方法不用传参数了
//            account.saveAccount()
            // 加载用户信息，调用这个方法时返回的用户信息比较完整
            account.loadUserInfo { (account, error) -> () in
                // 如果账户信息获取到了，就打印
                if account != nil{
                    print("哎呦喂：\(account)哎呦喂")
                    // 设置全局的account
                    sharedUserAccount = account
                    // 发送通知，false表示切换到欢迎界面
                    NSNotificationCenter.defaultCenter().postNotificationName(YQSwitchRootVCNotification, object: false)
                    
                    self.close()
                    return
                }
                print(error)
                SVProgressHUD.showInfoWithStatus("您的网络不给力。。。")
                
            }
            
            }) { (_, error) -> Void in
                print(error)
                SVProgressHUD.showInfoWithStatus("您的网络不给力。。。")
              
        }
    }
    

     // 已经加载的时候调用
    func webViewDidStartLoad(webView: UIWebView) {
        // 提示用户正在加载
//        print("正在加载")
        SVProgressHUD.show()
        
    }
    // 加载完成时候调用
    func webViewDidFinishLoad(webView: UIWebView) {
        // 关闭提示
//        print("加载完成")
        SVProgressHUD.dismiss()
    }
    
    
}
